#include<stdio.h>
#include<unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define PATHNAME "/home/china"
#define PRO_ID 3000

struct msgbuf
{
    long mtype;    /* message type, must be > 0 */
    char mtext[1]; /* message data   柔性数组 */
};



int main()
{
	//先向内核申请一个IPC的KEY
	key_t key = ftok(PATHNAME,PRO_ID);
	if(key == -1)
	{
		perror("fial");
		return -1;
	}
	//利用key创建一个IPC对象
	int msgid = msgget(key,IPC_CREAT | 0664);
	if(msgid == -1)
	{
		perror("fial");
		return -1;
	}
	//读写，控制操作
	//获取数据，发送消息到队列
	printf("输入数据：");
	char buf[256] = {0};
	scanf("%s",buf);
	struct msgbuf *p = (struct msgbuf *)malloc(sizeof(struct msgbuf) + strlen(buf) + 1);
	memset(p, 0, sizeof(struct msgbuf) + strlen(buf)+1);
	strcpy(p->mtext,buf);

	printf("输入类型:");
	scanf("%ld",&(p->mtype));
	//msgsnd:用来把msgp指向的消息放到msqid指定的消息队列上面去
	int ret = msgsnd(msgid, p, strlen(buf),0);
	if(ret == -1)
	{
		perror("fial");
		return -1;
	}

	free(p);
}